﻿using System.Windows;
using Vision.UI.Shell;
using Vision.UI.Views;
using Prism.Ioc;
using Prism.Modularity;
using Prism.DryIoc;
using Vision.Host;

namespace Vision.UI;

/// <summary>
/// 应用程序入口类，继承自 PrismApplication，负责应用的启动、依赖注入、模块加载等核心功能。
/// </summary>
public partial class App : PrismApplication
{
    /// <summary>
    /// 创建 DryIoc 容器扩展。用于配置和初始化依赖注入容器。
    /// </summary>
    /// <returns>DryIocContainerExtension 实例</returns>
    protected override IContainerExtension CreateContainerExtension()
    {
        // 使用 DryIoc 作为依赖注入容器
        return new DryIocContainerExtension();
    }

    /// <summary>
    /// 创建应用主窗口（Shell）。
    /// </summary>
    /// <returns>主窗口 ShellView 实例</returns>
    protected override Window CreateShell()
    {
        // 通过容器解析并返回 ShellView 作为主窗口
        return Container.Resolve<ShellView>();
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="containerRegistry">容器注册器</param>
    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {

    }

    /// <summary>
    /// 应用初始化时调用，进行区域与视图的绑定。
    /// </summary>
    protected override void OnInitialized()
    {
        base.OnInitialized();

        // 解析区域管理器
        var regionManager = Container.Resolve<IRegionManager>();

        // 将各个视图注册到指定区域，实现区域化布局
        regionManager.RegisterViewWithRegion("ControlRegion", typeof(ControlView));
        regionManager.RegisterViewWithRegion("ProcessingRegion", typeof(ProcessingView));
        regionManager.RegisterViewWithRegion("LogRegion", typeof(LogsView));
        regionManager.RegisterViewWithRegion("MonitorRegion", typeof(MonitorView));
    }

    /// <summary>
    /// 配置模块目录，注册 HostModule 模块。
    /// </summary>
    /// <param name="moduleCatalog">模块目录</param>
    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
    {
        // 添加 HostModule 到模块目录，实现模块化加载
        moduleCatalog.AddModule<HostModule>();
    }
}
